package mx.tools;

import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import org.codehaus.groovy.runtime.ResourceGroovyMethods;

public class UFile {
	//保存数据集,带转义功能，不控制顺序,覆盖原文件
//	public static void maplist2file(List<Map> list, String fname) {
//		File file = new File(fname);
//		file.setText("");
//		
//		IMapper mapper = new MapperMx();
//		
//		for (int i=0;i<list.size(); i++) {
//			Map m = list.get(i);
//			String line = mapper.map2String(m);
//			file.append(line+"\r\n");
//		}
//	}
	
	public static void deleteFile(String filename) throws Exception {
		File file = new File(filename);
		if (file.exists()) {
			USys.assertIt(file.delete(), "无法删除文件[%s]", filename);
		}
	}

//	public static deleteDir(String filename) throws Exception {
//		File file = new File(filename);
//		if (file.exists()) {
//			USys.assertIt(file.deleteDir(), "无法删除目录[%s]", filename);
//		}
//	}
	
	/**
	 * 确认目录存在，如果不存在则新建
	 * @param dir
	 * @return
	 * @throws Exception
	 */
	public static void confirm_dir(String dir) throws Exception {
		File file = new File(dir);
		if (! file.exists()) 
			file.mkdir();
	}
	
	//读取数据集,带转义功能，不控制顺序
//	public static List file2maplist(String fname) {
//		List outlist = [];
//		
//		File f = new File(fname);
//		f.eachLine { String line ->
//			Map map = new MapperXX().string2Map(line);
//			outlist.add(map);
//		}
//		
//		return outlist;
//	}
	
	//文件内容按行读取至列表
//	public static List<String> file2list(String fname) {
//		File f = new File(fname);
//		List out = [];
//		f.eachLine { String line ->
//			if (line.trim()=='')
//				return;
//				
//			out.add(line);
//		}
//		return out;
//	}
	
	//列表中字符串按行写入文件,覆盖原文件
	public static void list2file(List<String> list, String fname) throws Exception {
		StringBuffer buf = new StringBuffer();
		
		for (int i=0;i<list.size(); i++) {
			String line = list.get(i);
			buf.append(line).append("\r\n");
		}
		
		string2File(buf.toString(), fname);
	}
	
	/**
	 * 向文件添加一行(自动加换行)，如果文件不存在则新建
	 * @param filename
	 * @param line
	 * @throws Exception
	 */
//	public static void append2file(String filename, String line) throws Exception {
//		File file = new File(filename);
//		if (! file.exists()) file.setText("");
//		file.append(line+"\r\n");
//	}
	
	//数据集按tab键分隔方式存入文件，第一行存表头
//	public static void maplist2tabfile(List<Map> list, String fname) {
//		File file = new File(fname);
//		file.setText("");
//		
//		Map tmp = list[0];
//		List headlist = tmp.collect { it.getKey() };
//		file.append(headlist.join('\t')+'\r\n');
//		
//		for (int i=0; i<list.size(); i++) {
//			Map m = list[i];
//			List tl = headlist.collect { m.get(it) };
//			file.append(tl.join('\t')+'\r\n');
//		}
//	}
	
	//数据集按tab键分隔方式存入文件，第一行存表头, head为指定的表头，未在表头中的字段不保存
//	public static void maplist2tabfile(List<Map> list, String fname, List head) {
//		File file = new File(fname);
//		StringBuffer buf = new StringBuffer();
//		
//		Map tmp = list[0];
//		List headlist = head;
//		file.append(headlist.join('\t')+'\r\n');
//		
//		for (int i=0; i<list.size(); i++) {
//			Map m = list[i];
//			List tl = headlist.collect { m.get(it) };
//			file.append(tl.join('\t')+'\r\n');
//		}
//	}
	
	//读入按tab键分隔方式文件，文件第一行必须是表头
//	public static List<LinkedHashMap> tabfile2maplist(String fname) {
//		List lines = file2list(fname);
//		List out = [];
//		
//		List headlist = lines[0].split('\t');
//		for (int i=1; i<lines.size; i++) {
//			List tmp = lines[i].split('\t');
//			Map map = new LinkedHashMap();
//			for (int k=0; k<headlist.size; k++) {
//				String v = '';
//				if (k<tmp.size)
//					v = tmp[k];
//				map.put(headlist[k], v); 
//			}
//			out.add(map);
//		}
//		return out;
//	}
	
	//将list中每个元素作为字符串进行比较，比较方式与字符串的compareTo类似
//	public static int listCompare(List list1, List list2) {
//		assert list1.size() == list2.size();
//		for (int i=0; i<list1.size; i++) {
//			int x = list1[i].toString().compareTo(list2[i].toString())
//			if (0 != x)
//				return x;
//		}
//		return 0;
//	}
	
	//数据集按namelist中指定的字段名进行排序
//	public static List<Map> maplistSort(List<Map> list, List names) {
//		List newdata = list.sort() { e1, e2 ->
//			List le1 = names.collect { e1.get(it) };
//			List le2 = names.collect { e2.get(it) };
//			listCompare(le1, le2);
//		}
//		return newdata;
//	}
	
	
	public static void pressEnter(String prompt) throws Exception {
		System.out.println(prompt);
		InputStreamReader rin = new InputStreamReader(System.in);
		BufferedReader br = new BufferedReader(rin);
		String inputStr = null;
		inputStr = br.readLine();
	}
	
   	
	public static String file2String(String filename) throws Exception {
		return ResourceGroovyMethods.getText(new File(filename));
	}
	
	public static void string2File(String filename, String text) throws Exception {
		ResourceGroovyMethods.setText(new File(filename), text);
	}
}
